package org.example.ndarray.create;

import ai.djl.ndarray.NDArray;
import ai.djl.ndarray.NDManager;
import ai.djl.ndarray.types.Shape;

public class Example2 {
    public static void main(String[] args) {
        try (NDManager ndManager = NDManager.newBaseManager()) {
            /*
              通过create创建的方法，只有shape会占用一些内存然后返回一个矩阵
              此过程不会改变矩阵中任何数值。这是非常高效但我们也需要谨慎使用
              因为矩阵的成员很有可能是任意数值，包括很大的任意数值
              (有点像C语言的malloc函数申请空间)
             */
            NDArray ndArray = ndManager.create(new Shape(3, 4));
            System.out.println(ndArray);
            /*
              我们希望矩阵初始化要不成员是0，要不是1或者其他常数，或者是明确维度分布的随机数
              我们创建一个NDArray代表一个tensor张量
              它的成员都是0，维度是(2, 3, 4)
             */
            ndArray = ndManager.zeros(new Shape(2, 3, 4));
            System.out.println(ndArray);
            // 同样，我们可以创建一个成员都是1的tensor张量
            ndArray = ndManager.ones(new Shape(2, 3, 4));
            System.out.println(ndArray);
            // 我们也可以通过按照需要构造NDArray，只需要明确每个成员的算数值和期望维度即可
            ndArray = ndManager.create(new float[]{2, 1, 4, 3, 1, 2, 3, 4, 4, 3, 2, 1}
                    , new Shape(3, 4));
            System.out.println(ndArray);
        }
    }
}
